#ifndef STARMUSIC_H
#define STARMUSIC_H

#include <QJsonArray>
#include <QJsonObject>
#include <QPushButton>
#include <QtEvents>
#include <QWidget>
#include <QPoint>
#include <QGraphicsDropShadowEffect>
#include <QList>
#include <QVector>
#include <QFileDialog>
#include <QMediaPlayer>
#include <QMediaPlaylist>
#include <QPropertyAnimation>
#include <QMessageBox>
#include <QSqlDatabase>
#include <QSystemTrayIcon>
#include <QSqlError>
#include <QMenu>
#include <QSqlQuery>
#include "musiclist.h"
#include "musicslider.h"
#include "volumetool.h"
#include "lrcpage.h"
#include "commonpage.h"
QT_BEGIN_NAMESPACE
namespace Ui { class StarMusic; }
QT_END_NAMESPACE

class StarMusic : public QWidget
{
    Q_OBJECT

public:
    StarMusic(QWidget *parent = nullptr);
    ~StarMusic();
    QPoint m_offs;
    void initUi();
    void initPlayer();
    QJsonArray randomPiction();
    void connectSignalAndSlots();
    void initSqlite();
    void initMusicList();
    void updateBtformAnimal();
    void starMusicQuit();

private slots:
    void on_quit_clicked();
    void onbtFormClick(int pageId);
    void on_volume_clicked();
    void on_addLocal_clicked();

    // 点击唤出歌词
    void onLrcWordClicked();
    void onUpdateLikeMusicAndPage(bool isLike,const QString& musicId);
    // 播放控制区的槽函数
    // 播放按钮 歌曲在播放和暂停之间切换
    void onPlayMusic();

    void onPlayStateChanged();

    // 上一曲
    void onPlayUpClicked();
    // 下一曲
    void onPlayDownClicked();
    // 设置播放模式
    void onPlaybackModelClicked();
    void onPlaybackModeChanged(QMediaPlaylist::PlaybackMode playbackMode);
    void onCurrentIndexChanged(int index);
    void onPlayAll(PageType pagetype);
    void playAllMusicOfCommonPage(CommonPage* page,int index);
    void playMusicByIndex(CommonPage *page,int index);

    // 音量类发来信号
    void setPlayerMuted(bool isMuted);
    // 更改音量大小的槽函数
    void setPlayerVolume(int volume);
    // 音量显示
     void onDurationChanged(qint64); //
     void onPositionChanger(qint64); // 播放进度发生改变
     void onMusicSliderChanged(float ration);// 随进度条改变
     void onMetaDataAvailableChanged(bool);
     void on_min_clicked();

     void on_skin_clicked();

     void on_max_clicked();

protected:
    void mouseMoveEvent(QMouseEvent *event)override;
    void mousePressEvent(QMouseEvent *event)override;

private:
    Ui::StarMusic *ui;
    VolumeTool* volumetool;
    MusicList musicList;
    VolumeTool* volumTool;
    QMediaPlayer* player; // 播放控制
    QMediaPlaylist* playList; // 管理播放源 包含播放设置
    CommonPage* currentPage; // 当前正在播放的commonPage页面
    qint64 totalTime; // 歌曲总时间
    int currentIndex; // 记录当前歌曲在列表中的索引
    LrcPage* lrcPage; // 满屏歌词
    QPropertyAnimation* lrcPageAnimal; // 满屏歌词
    QSqlDatabase sqlite;
    bool isDrag;

};
#endif // STARMUSIC_H
